package com.iluwatar;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 
 * In Inventory we store the items with a given size. However,
 * we do not store more items than the inventory size. To address
 * concurrent access problems we use double checked locking to add
 * item to inventory. In this method, the thread which gets the lock
 * first adds the item. 
 */

public class App 
{
    public static void main( String[] args )
    {
    	final Inventory inventory = new Inventory(1000);
    	ExecutorService executorService = Executors.newFixedThreadPool(3);
    	for (int i = 0; i < 3; i++) {
    		executorService.execute(new Runnable() {
    			@Override
    			public void run() {
    				while(inventory.addItem(new Item()));
    			}
    		});
		}
    }
}
